//
//  HMSqliteManager.swift
//  01-FMDB演练
//
//  Created by teacher on 2017/6/17.
//  Copyright © 2017年 teacher. All rights reserved.
//

import UIKit
import FMDB

//  数据库路径
let DBPath = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as NSString).appendingPathComponent("test.db")

//  数据库操作工具类
class HMSqliteManager: FMDatabaseQueue {
   
//    var queue: FMDatabaseQueue?
//    
//    static let shareManger: HMSqliteManager = {
//        let manager = HMSqliteManager()
//        return manager
//    }()
//    
//    override init() {
//        super.init()
//        queue = FMDatabaseQueue()
//    }
    //  单例全局访问点，为了数据操作按钮，把操作队列使用单例创建
    static let sharedManager: HMSqliteManager = {
        let manager = HMSqliteManager(path: DBPath)
        manager.createTables()
        print(DBPath)
        
        return manager
    }()
    
    //  创建表
    private func createTables() {
        //  db.sql文件路径
        let sqlPath = Bundle.main.path(forResource: "db.sql", ofType: nil)!
        //  获取sql语句
        let sql = try! String(contentsOfFile: sqlPath)
        //  执行sql
        self.inDatabase { (db) in
            let result = db.executeStatements(sql)
            if result == true {
                print("创表成功")
            } else {
                print("创表失败")
            }
        }
    
    }
    
    //  根据sql语句查询返回字典数组
    func selectDicArray(sql: String) -> [[String: Any]] {
        
        
        var tempArray = [[String: Any]]()
        
        //  执行sql
        self.inDatabase { (db) in
            if let resultSet = db.executeQuery(sql, withArgumentsIn: []) {
                //  获取结果集的没有问题
                //  遍历结果集
                while resultSet.next() {
                    //  遍历每一条记录对应一个字典
                    var dic = [String: Any]()
                    //  获取列数
                    let colCount = resultSet.columnCount
                    
                    //  遍历列数，根据列索引可以获取列名和列值
                    for i in 0..<colCount {
                        //  根据列索引获取对应的列名
                        let colName = resultSet.columnName(for: i)!
                        //  根据列的索引或者列名获取列值
                        let colValue = resultSet.object(forColumnIndex: i)!
                        //  键值对添加到字典里面
                        dic[colName] = colValue
                    }
                    //  把条记录对应的字典添加到数组里面
                    tempArray.append(dic)
                }
                
            }
        }
        
        return tempArray
    }
    
    
   
}
